www.gusucode.com > VC++ 编写软件自动升级服务源代码 > VC++ 编写软件自动升级服务源代码/gusucode/updater_src0.8.1.6/ProxySettingsDlg.cpp

    /********************************************************************
	created:	2005/12/05
	created:	5:12:2005   11:35
	filename: 	ProxySettingsDlg.cpp
	file path:	Updater
	file base:	ProxySettingsDlg
	file ext:	cpp
	author:		Geert van Horrik
	
	purpose:	
*********************************************************************/

//*********************************************************************
// INCLUDES
//*********************************************************************

#include "stdafx.h"
#include "Updater.h"
#include "ProxySettingsDlg.h"
#include "AboutDlg.h"

//*********************************************************************
// MESSAGE MAP
//*********************************************************************

BEGIN_MESSAGE_MAP(CProxySettingsDlg, CDialog)
	ON_WM_SYSCOMMAND()
	ON_COMMAND(btnOK, OnBtnOK)
	ON_COMMAND(btnCancel,OnBtnCancel)
	ON_COMMAND(rdDirectConnection, OnSelectDirectConnection)
	ON_COMMAND(rdAutoDetect, OnSelectAutoDetect)
	ON_COMMAND(rdManual, OnSelectManual)
	ON_COMMAND(rdAutoConfigURL, OnSelectAutoConfigURL)
END_MESSAGE_MAP()

//*********************************************************************
// CONSTRUCTOR & DESTRUCTOR
//*********************************************************************

CProxySettingsDlg::CProxySettingsDlg(CWnd* pParent /*=NULL*/)
	: CDialog(CProxySettingsDlg::IDD, pParent)
{

}

//=====================================================================

CProxySettingsDlg::~CProxySettingsDlg()
{
	// Release bitmap objects
	m_bmpMenuLogo.DeleteObject();
	m_bmpMenuLogoNegative.DeleteObject();
}

//*********************************************************************
// PUBLIC FUNCTIONS
//*********************************************************************

void CProxySettingsDlg::OnBtnOK()
{
	// Declare variables
	CString sProxyType = PROXY_TYPE_AUTODETECT;
	CString sHttp, sFtp, sAutoConfigURL;
	CSettings * pSettings = CSettings::Instance();

	// Get selected type
	if (m_rdDirectConnection.GetCheck() != 0)
		sProxyType = PROXY_TYPE_DIRECTCONNECTION;

	if (m_rdAutoDetect.GetCheck() != 0)
		sProxyType = PROXY_TYPE_AUTODETECT;

	if (m_rdManual.GetCheck() != 0)
		sProxyType = PROXY_TYPE_MANUAL;

	if (m_rdAutoConfigURL.GetCheck() != 0)
		sProxyType = PROXY_TYPE_AUTOCONFIGURL;

	// Get manual settings
	m_txtHttpProxy.GetWindowText(sHttp);
	m_txtFtpProxy.GetWindowText(sFtp);
	
	// Get auto config url
	m_txtAutoConfigURL.GetWindowText(sAutoConfigURL);

	// Store all settings
	pSettings->SetProxyType(sProxyType);
	pSettings->SetProxyManualHttp(sHttp);
	pSettings->SetProxyManualFtp(sFtp);
	pSettings->SetProxyAutoConfigURL(sAutoConfigURL);

	// Save settings
	pSettings->SaveFile();

	// Close dialog
	EndDialog(IDOK);
}

//=====================================================================

void CProxySettingsDlg::OnBtnCancel()
{
	// Close dialog
	EndDialog(IDCANCEL);
}

//=====================================================================

void CProxySettingsDlg::OnSelectDirectConnection()
{
	// Disable all other controls
	EnableManualProxy(FALSE);
	EnableAutoConfigURL(FALSE);

	// Select the right control
	m_rdDirectConnection.SetCheck(1);
	m_rdAutoDetect.SetCheck(0);
	m_rdManual.SetCheck(0);
	m_rdAutoConfigURL.SetCheck(0);
}

//=====================================================================

void CProxySettingsDlg::OnSelectAutoDetect()
{
	// Disable all other controls
	EnableManualProxy(FALSE);
	EnableAutoConfigURL(FALSE);

	// Select the right control
	m_rdDirectConnection.SetCheck(0);
	m_rdAutoDetect.SetCheck(1);
	m_rdManual.SetCheck(0);
	m_rdAutoConfigURL.SetCheck(0);
}

//=====================================================================

void CProxySettingsDlg::OnSelectManual()
{
	// Disable all other controls
	EnableAutoConfigURL(FALSE);

	// Enable manual proxy
	EnableManualProxy(TRUE);

	// Select the right control
	m_rdDirectConnection.SetCheck(0);
	m_rdAutoDetect.SetCheck(0);
	m_rdManual.SetCheck(1);
	m_rdAutoConfigURL.SetCheck(0);
}

//=====================================================================

void CProxySettingsDlg::OnSelectAutoConfigURL()
{
	// Disable all other controls
	EnableManualProxy(FALSE);

	// Enable auto config url proxy
	EnableAutoConfigURL(TRUE);	

	// Select the right control
	m_rdDirectConnection.SetCheck(0);
	m_rdAutoDetect.SetCheck(0);
	m_rdManual.SetCheck(0);
	m_rdAutoConfigURL.SetCheck(1);
}

//*********************************************************************
// PRIVATE FUNCTIONS
//*********************************************************************

void CProxySettingsDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	DDX_Control(pDX, rdDirectConnection, m_rdDirectConnection);
	DDX_Control(pDX, rdAutoDetect, m_rdAutoDetect);
	DDX_Control(pDX, rdManual, m_rdManual);
	DDX_Control(pDX, rdAutoConfigURL, m_rdAutoConfigURL);
	DDX_Control(pDX, btnOK, m_btnOK);
	DDX_Control(pDX, btnCancel, m_btnCancel);
	DDX_Control(pDX, lblHttpProxy, m_lblHttpProxy);
	DDX_Control(pDX, lblFtpProxy, m_lblFtpProxy);
	DDX_Control(pDX, txtFtpProxy, m_txtFtpProxy);
	DDX_Control(pDX, txtHttpProxy, m_txtHttpProxy);
	DDX_Control(pDX, txtAutoConfigURL, m_txtAutoConfigURL);
}

//=====================================================================

BOOL CProxySettingsDlg::OnInitDialog()
{
	// Call original function
	CDialog::OnInitDialog();

	// Declare variables
	CLanguage * pLanguage = CLanguage::Instance();
	CSettings * pSettings = CSettings::Instance();
	bool bSelected = false;

	// Edit system menu
	CMenu * pSysMenu = GetSystemMenu(FALSE);
	if (pSysMenu != NULL)
	{
		// Add about
		pSysMenu->AppendMenu(MF_SEPARATOR);
		pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, pLanguage->GetString(IDS_ABOUT_TITLE) + "...");

		// Add bitmap to menu
		m_bmpMenuLogo.LoadBitmap(IDB_UPDATER);
		m_bmpMenuLogoNegative.LoadBitmap(IDB_UPDATER_NEG);
		pSysMenu->SetMenuItemBitmaps(IDM_ABOUTBOX, MF_BYCOMMAND, &m_bmpMenuLogo, &m_bmpMenuLogoNegative);

		// Delete maximize
		pSysMenu->DeleteMenu(SC_MAXIMIZE, MF_BYCOMMAND);

		// Delete minimize
		pSysMenu->DeleteMenu(SC_MINIMIZE, MF_BYCOMMAND);

		// Delete change size
		pSysMenu->DeleteMenu(SC_SIZE, MF_BYCOMMAND);
	}

	// Load icon
	if (PathFileExists(pSettings->GetIcon()))
	{
		// Custom user icon
		HICON tmpIcon = (HICON)LoadImage(NULL, pSettings->GetIcon(), IMAGE_ICON, LR_DEFAULTSIZE, LR_DEFAULTSIZE, LR_LOADFROMFILE);

		// Check if we loaded successfully
		if (tmpIcon)
		{
			SetIcon(tmpIcon, TRUE);
		}
		else
		{
			// Default Updater icon
			SetIcon(AfxGetApp()->LoadIcon(IDI_UPDATER), TRUE);
		}
	}
	else
	{
		// Default Updater icon
		SetIcon(AfxGetApp()->LoadIcon(IDI_UPDATER), TRUE);
	}

	// Load language specific strings
	SetWindowText(pLanguage->GetString(IDS_PROXY_TITLE));
	m_rdDirectConnection.SetWindowText(pLanguage->GetString(IDS_PROXY_DIRECT));
	m_rdAutoDetect.SetWindowText(pLanguage->GetString(IDS_PROXY_AUTODETECT));
	m_rdManual.SetWindowText(pLanguage->GetString(IDS_PROXY_MANUAL));
	m_rdAutoConfigURL.SetWindowText(pLanguage->GetString(IDS_PROXY_AUTOCONFIGURL));
	m_btnOK.SetWindowText(pLanguage->GetString(IDS_GENERAL_OK));
	m_btnCancel.SetWindowText(pLanguage->GetString(IDS_GENERAL_CANCEL));
	m_lblHttpProxy.SetWindowText(pLanguage->GetString(IDS_PROXY_HTTP));
	m_lblFtpProxy.SetWindowText(pLanguage->GetString(IDS_PROXY_FTP));

	// Select right settings
	if (pSettings->GetProxyType() == PROXY_TYPE_DIRECTCONNECTION)
	{
		OnSelectDirectConnection();
		bSelected = true;
	}

	if (pSettings->GetProxyType() == PROXY_TYPE_AUTODETECT)
	{
		OnSelectAutoDetect();
		bSelected = true;
	}

	if (pSettings->GetProxyType() == PROXY_TYPE_MANUAL)
	{
		OnSelectManual();
		bSelected = true;
	}

	if (pSettings->GetProxyType() == PROXY_TYPE_AUTOCONFIGURL)
	{
		OnSelectAutoConfigURL();
		bSelected = true;
	}

	// If we did not select anything, select auto-detect
	if (!bSelected)
	{
		OnSelectAutoDetect();
	}

	// Manual settings
	m_txtHttpProxy.SetWindowText(pSettings->GetProxyManualHttp());
	m_txtFtpProxy.SetWindowText(pSettings->GetProxyManualFtp());

	// Auto config URL
	m_txtAutoConfigURL.SetWindowText(pSettings->GetProxyAutoConfigURL());
	
	// Return TRUE unless you want to set focus to a control
	return TRUE;
}

//=====================================================================

void CProxySettingsDlg::OnSysCommand(UINT nID, LPARAM lParam)
{
	// If user wants to see about box
	if ((nID & 0xFFF0) == IDM_ABOUTBOX)
	{
		// Show about dialog
		CAboutDlg dlgAbout;
		dlgAbout.DoModal();
	}

	// Call original function
	CDialog::OnSysCommand(nID, lParam);
}

//=====================================================================

void CProxySettingsDlg::EnableManualProxy(BOOL bEnable)
{
	// Enable/disable right controls
	m_txtHttpProxy.EnableWindow(bEnable);
	m_txtFtpProxy.EnableWindow(bEnable);
}

//=====================================================================

void CProxySettingsDlg::EnableAutoConfigURL(BOOL bEnable)
{
	// Enable/disable right controls
	m_txtAutoConfigURL.EnableWindow(bEnable);
}